﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using skhukb.DB;

namespace skhukb.BL
{
    public class 주제변경내역
    {
        private static void DB에저장(DBDataContext db, long 주제ID, string 편집유형, string 제목, string 내용)
        {
            var 내역 = new 주제편집 {
                주제ID = 주제ID,
                편집유형 = 편집유형,
                편집일 = DateTime.Now,
                편집자ID = 현재사용자.사용자.ID,
                제목 = 제목,
                내용 = 내용
            };
            db.주제편집.InsertOnSubmit(내역);
        }

        public static String 목차순서내용(DBDataContext db, long 주제ID)
        {
            StringBuilder sb = new StringBuilder();
            var s = string.Format("<table class='{0}'><tr><th>작성일</th><th>작성자</th><th>제목</th></tr>", Consts.목차순서변경);
            sb.Append(s);
            foreach (var p in db.글.Where(p => p.주제ID == 주제ID && p.상태 == Consts.최신버전).OrderBy(p => p.순서).ThenBy(p => p.ID)) {
                s = string.Format("<tr><td>{0:yyyy-MM-dd HH:mm}</td><td>{1}</td><td>{2}</td></tr>", p.생성일, p.사용자.이름, p.제목);
                sb.Append(s);
            }
            sb.Append("</table>");
            return sb.ToString();
        }

        public static void 목차순서변경(DBDataContext db, long 주제ID, string 변경전내용, string 변경후내용)
        {
            DB에저장(db, 주제ID, Consts.목차순서변경, "주제에 소속된 글의 목차 순서를 변경", "<b>변경전 목차</b>" + 변경전내용 + "<b>변경후 목차</b>" + 변경후내용);
        }

        const string 주제생성FMT = @"
<table class='{0}'>
 <tr>
  <td>주제명:</td>
  <td>{1}</td>
 </tr>
 <tr>
  <td>상위주제:</td>
  <td>{2}</td>
 </tr>
</table>
";
        public static void 주제생성(DBDataContext db, 주제 주제)
        {
            var 내용 = string.Format(주제생성FMT, Consts.주제생성, 주제.제목, 주제.상위주제.총제목);
            DB에저장(db, 주제.ID, Consts.주제생성, "주제를 새로 생성", 내용);
        }

        const string 주제제거FMT = @"
<table class='{0}'>
 <tr>
  <td>주제명:</td>
  <td>{1}</td>
 </tr>
 <tr>
  <td>상위주제:</td>
  <td>{2}</td>
 </tr>
</table>
";
        public static void 주제제거(DBDataContext db, 주제 주제)
        {
            var 내용 = string.Format(주제제거FMT, Consts.주제제거, 주제.제목, 주제.상위주제.총제목);
            DB에저장(db, 주제.ID, Consts.주제제거, "상위 주제에서 보여지지 않도록 이 주제를 제거", 내용);
        }

        const string 주제제거취소FMT = @"
<table class='{0}'>
 <tr>
  <td>주제명:</td>
  <td>{1}</td>
 </tr>
 <tr>
  <td>상위주제:</td>
  <td>{2}</td>
 </tr>
</table>
";
        public static void 주제제거취소(DBDataContext db, 주제 주제)
        {
            var 내용 = string.Format(주제제거취소FMT, Consts.주제제거취소, 주제.제목, 주제.상위주제.총제목);
            DB에저장(db, 주제.ID, Consts.주제제거취소, "이 주제가 다시 상위주제에 표시되도록 변경", 내용);
        }

        const string 주제이동FMT = @"
<table class='{0}'>
 <tr>
  <td>전 상위주제:</td>
  <td>{1}</td>
 </tr>
 <tr>
  <td>새 상위주제:</td>
  <td>{2}</td>
 </tr>
</table>
";
        public static void 주제이동(DBDataContext db, long 주제ID, string 변경전상위주제명, string 변경후상위주제명)
        {
            var 내용 = string.Format(주제이동FMT, Consts.주제이동, 변경전상위주제명, 변경후상위주제명);
            DB에저장(db, 주제ID, Consts.주제이동, "이 주제를 다른 상위주제 아래로 이동", 내용);
        }

        const string 주제명변경FMT = @"
<table class='{0}'>
 <tr>
  <td>변경전 제목:</td>
  <td>{1}</td>
 </tr>
 <tr>
  <td>변경후 제목:</td>
  <td>{2}</td>
 </tr>
</table>
";
        public static void 주제명변경(DBDataContext db, long 주제ID, string 변경전제목, string 변경후제목)
        {
            var 내용 = string.Format(주제명변경FMT, Consts.주제명변경, 변경전제목, 변경후제목);
            DB에저장(db, 주제ID, Consts.주제명변경, "주제의 제목을 변경", 내용);
        }

        const string 글제거FMT = @"
<table class='{0}'>
 <tr>
  <td>글제목:</td>
  <td><a href='/Article/History/{1}'>{2}</a></td>
 </tr>
 <tr>
  <td>글작성자:</td>
  <td>{3}</td>
 </tr>
 <tr>
  <td>글작성일:</td>
  <td>{4}</td>
 </tr>
</table>
";
        public static void 글제거(DBDataContext db, 글 글)
        {
            var 내용 = string.Format(글제거FMT, Consts.글제거, 글.ID, 글.제목, 글.사용자.이름, 글.생성일);
            DB에저장(db, 글.주제ID, Consts.글제거, "주제에서 글을 제거", 내용); 
        }

        const string 글제거취소FMT = @"
<table class='{0}'>
 <tr>
  <td>글제목:</td>
  <td><a href='/Article/History/{1}'>{2}</a></td>
 </tr>
 <tr>
  <td>글작성자:</td>
  <td>{3}</td>
 </tr>
 <tr>
  <td>글작성일:</td>
  <td>{4}</td>
 </tr>
</table>
";
        public static void 글제거취소(DBDataContext db, 글 글) 
        {
            var 내용 = string.Format(글제거취소FMT, Consts.글제거, 글.ID, 글.제목, 글.사용자.이름, 글.생성일);
            DB에저장(db, 글.주제ID, Consts.글제거취소, "주제에서 제거된 글을 복구", 내용);
        }

        const string 글이동FMT = @"
<table class='{0}'>
 <tr>
  <td>글제목:</td>
  <td><a href='/Article/History/{1}'>{2}</a></td>
 </tr>
 <tr>
  <td>이전 주제:</td>
  <td><a href='/Subject/Detail/{3}'>{4}</a></td>      
 </tr>
 <tr>
  <td>새 주제:</td>
  <td><a href='/Subject/Detail/{5}'>{6}</a></td>      
 </tr>
</table>
";
        public static void 글이동(DBDataContext db, 주제 주제1, 주제 주제2, 글 글)
        {
            var 내용 = string.Format(글이동FMT, Consts.글이동, 글.ID, 글.제목, 주제1.ID, 주제1.총제목, 주제2.ID, 주제2.총제목);
            DB에저장(db, 주제1.ID, Consts.글이동, "주제에서 글을 이동해 나감", 내용);
            DB에저장(db, 주제2.ID, Consts.글이동, "주제로 글을 이동해 가져옴", 내용);
        }

        const string 파일첨부FMT = @"
<table class='{0}'>
 <tr>
  <td>파일명:</td>
  <td>{1}</td>
 </tr>
 <tr>
  <td>파일크기:</td>
  <td>{2:N0}</td>
 </tr>
 <tr>
  <td>날짜:</td>
  <td>{3}</td>
 </tr>
 <tr>
  <td>글:</td>
  <td>{4}</td>
 </tr>
</table>
";
        public static void 파일첨부(DBDataContext db, long 주제ID, string 글제목, 파일 파일)
        {
            var 내용 = string.Format(파일첨부FMT, Consts.파일첨부, 파일.파일명, 파일.크기, DateTime.Now, 글제목);
            DB에저장(db, 주제ID, Consts.파일첨부, "파일 첨부", 내용);
        }

        const string 파일삭제FMT = @"
<table class='{0}'>
 <tr>
  <td>파일명:</td>
  <td>{1}</td>
 </tr>
 <tr>
  <td>파일크기:</td>
  <td>{2:N0}</td>
 </tr>
 <tr>
  <td>날짜:</td>
  <td>{3}</td>
 </tr>
 <tr>
  <td>글:</td>
  <td>{4}</td>
 </tr>
</table>
";
        public static void 파일삭제(DBDataContext db, long 주제ID, string 글제목, 파일 파일)
        {
            var 내용 = string.Format(파일삭제FMT, Consts.파일삭제, 파일.파일명, 파일.크기, DateTime.Now, 글제목);
            DB에저장(db, 주제ID, Consts.파일삭제, "파일 삭제", 내용);
        }
    }

}